Non decreasing array¶
Time: O(N); Space: O(1); easy
Given an array with n integers, your task is to check if it could become non-decreasing by modifying at most 1 element.
We define an array is non-decreasing if array[i] <= array[i + 1] holds for every i (1 <= i < n).
Example 1:
Input: nums = [4, 2, 3]
Output: True
Explanation:
You could modify the first 4 to 1 to get a non-decreasing array.
Example 2:
Input: nums = [4, 2, 1]
Output: False
Explanation:
You can’t get a non-decreasing array by modify at most one element.
Notes:
1 <= n <= 10 ^ 4
-10 ^ 5 <= nums[i] <= 10 ^ 5
[4]:
class Solution1(object):
def checkPossibility(self, nums):
"""
:type nums: List[int]
:rtype: bool
"""
modified, prev = False, nums[0]
for i in range(1, len(nums)):
if prev > nums[i]:
if modified:
return False
if i-2 < 0 or nums[i-2] <= nums[i]:
prev = nums[i]
modified = True
else:
prev = nums[i]
return True
[5]:
s = Solution1()
nums = [4, 2, 3]
assert s.checkPossibility(nums) == True
nums = [4, 2, 1]
assert s.checkPossibility(nums) == False